|
Guarded Horn Clauses (GHC)は、1984年末に設計され1985年に発表された並行論理プログラミング言語である〔Ueda, K. ''Guarded Horn Clauses''. ICOT Technical Report TR-103〕。第五世代コンピュータプロジェクトで並列マシンの核言語の検討をしていた上田和紀により設計された。核言語の候補だったConcurrent Prologを分析する過程で問題点を見付け、それを解決するさらに単純化した言語として設計した。 GHCのバリエーションであるFlat GHCを基に、近山 隆によりKL1 (Kernel Language One) が設計され、第五世代コンピュータプロジェクトでハードウェアと応用ソフトウェアとの間を繋ぐ核言語として、並列マシンのオペレーティングシステムやKL1を含む様々な言語処理系、各種応用プログラムの作成に利用された〔近山 隆, ''オペレーティングシステムPIMOSと核言語KL1''〕。 == 概要 == Guarded Horn Clauses (GHC) は並行プログラミングのためのプログラミング言語で、論理変数を介して通信を行う複数の軽量プロセスのネットワークとしてプログラムを記述する。「並行アルゴリズムを気持ちよく記述できる汎用プログラミング言語を論理プログラミングの枠組みを利用して開発すること」を目標として設計された〔古川 康一, 溝口 文雄(編) ''並列論理型言語GHCとその応用 (知識情報処理シリーズ)'' p. 34〕。多くの並行プログラミング言語が逐次処理言語に並行実行の機能を追加したものなのに対して、GHCは並行実行が基本で、並行処理を素直に記述できる。言語の特徴を以下に示す。 * 逐次実行ではなく並行実行が基本。並行処理を素直に記述できる。 * 動的にプロセスを生成できる。 * 動的に通信チャネルを生成でき、他のプロセスに転送できる。 * 通信ネットワークの動的な再構成が可能である。 * 様々な形態のプロセス間通信を表現できる。 * 理論的な背景を持ち、明確な意味論を持つ。 GHCではホーン節にガードを導入した以下のような規則(Clause)の集まりでプログラムを記述する。"|"はコミット演算子と呼ばれる。G はガード部、B はボディ部と呼ばれる。Head、G、Bはそれぞれ原子論理式である。ガード部の条件がない場合、ガード部とコミット演算子は省略できる。 Head :- G1, ..., Gn| B1, ..., Bm. (n,m≧0) このガード付きホーン節は、エドガー・ダイクストラのガード付きコマンドと同様のものである。HeadとG1, ..., Gnはプロセス書き換えのための条件、B1, ..., Bmは書き換え後のプロセスを表す。生成されたプロセスはすべて並行に実行される。また、各プロセスごとの書き換え条件のチェックも複数の節で並行に実行してよく、コミット時にただ1つの節が選択される(コミッティッド・チョイス)。prologと異なりバックトラックの機能はない。 ガード付きホーン節とプロセス動作の指示との関係は以下のようになる。 *停止 A :- Guard | True. *プロセス状態の変更 A :- Guard | B. *並行したmプロセスの生成 A :- Guard | B1, ..., Bm. プロセス間の通信にはプロセス間で共有する論理変数を使用する。書き換え規則の適用に十分な情報がなければ書き換えを中断し、判断に必要な情報が得られるまで待つことで、プロセス間の同期が行われる。多くの場合、プロセス間の通信には論理変数を含んだリストで表現されたストリームを用いる。ストリームは のようなリストで実現する。論理変数を共有するプロセスの数に制限はないため、ストリーム通信は1対1だけではなく1対Nのブロードキャストなど、様々な形態が可能である。GHCでは、プロセス間の同期のための中断のメカニズムとして''入力ガード (Input Guard)''を用いる。ヘッドおよびガード部でのユニフィケーションの際、呼び出し側の変数は入力モードでしかアクセスできず、呼び出し側の変数を具体化(Instantiation)するような試みは中断させられる。出力となる変数の具体化はボディ部のユニフィケーションで行う。 抄文引用元・出典: フリー百科事典『 のようなリストで実現する。論理変数を共有するプロセスの数に制限はないため、ストリーム通信は1対1だけではなく1対Nのブロードキャストなど、様々な形態が可能である。GHCでは、プロセス間の同期のための中断のメカニズムとして''入力ガード (Input Guard)''を用いる。ヘッドおよびガード部でのユニフィケーションの際、呼び出し側の変数は入力モードでしかアクセスできず、呼び出し側の変数を具体化(Instantiation)するような試みは中断させられる。出力となる変数の具体化はボディ部のユニフィケーションで行う。">ウィキペディア(Wikipedia)』 ■ のようなリストで実現する。論理変数を共有するプロセスの数に制限はないため、ストリーム通信は1対1だけではなく1対Nのブロードキャストなど、様々な形態が可能である。GHCでは、プロセス間の同期のための中断のメカニズムとして''入力ガード (Input Guard)''を用いる。ヘッドおよびガード部でのユニフィケーションの際、呼び出し側の変数は入力モードでしかアクセスできず、呼び出し側の変数を具体化(Instantiation)するような試みは中断させられる。出力となる変数の具体化はボディ部のユニフィケーションで行う。">ウィキペディアで「Guarded Horn Clauses (GHC)は、1984年末に設計され1985年に発表された並行論理プログラミング言語であるUeda, K. ''Guarded Horn Clauses''. ICOT Technical Report TR-103。第五世代コンピュータプロジェクトで並列マシンの核言語の検討をしていた上田和紀により設計された。核言語の候補だったConcurrent Prologを分析する過程で問題点を見付け、それを解決するさらに単純化した言語として設計した。GHCのバリエーションであるFlat GHCを基に、近山 隆によりKL1 (Kernel Language One) が設計され、第五世代コンピュータプロジェクトでハードウェアと応用ソフトウェアとの間を繋ぐ核言語として、並列マシンのオペレーティングシステムやKL1を含む様々な言語処理系、各種応用プログラムの作成に利用された近山 隆, ''オペレーティングシステムPIMOSと核言語KL1''。== 概要 ==Guarded Horn Clauses (GHC) は並行プログラミングのためのプログラミング言語で、論理変数を介して通信を行う複数の軽量プロセスのネットワークとしてプログラムを記述する。「並行アルゴリズムを気持ちよく記述できる汎用プログラミング言語を論理プログラミングの枠組みを利用して開発すること」を目標として設計された古川 康一, 溝口 文雄(編) ''並列論理型言語GHCとその応用 (知識情報処理シリーズ)'' p. 34。多くの並行プログラミング言語が逐次処理言語に並行実行の機能を追加したものなのに対して、GHCは並行実行が基本で、並行処理を素直に記述できる。言語の特徴を以下に示す。* 逐次実行ではなく並行実行が基本。並行処理を素直に記述できる。* 動的にプロセスを生成できる。* 動的に通信チャネルを生成でき、他のプロセスに転送できる。* 通信ネットワークの動的な再構成が可能である。* 様々な形態のプロセス間通信を表現できる。* 理論的な背景を持ち、明確な意味論を持つ。GHCではホーン節にガードを導入した以下のような規則(Clause)の集まりでプログラムを記述する。"|"はコミット演算子と呼ばれる。G はガード部、B はボディ部と呼ばれる。Head、G、Bはそれぞれ原子論理式である。ガード部の条件がない場合、ガード部とコミット演算子は省略できる。 Head :- G1, ..., Gn| B1, ..., Bm. (n,m≧0)このガード付きホーン節は、エドガー・ダイクストラのガード付きコマンドと同様のものである。HeadとG1, ..., Gnはプロセス書き換えのための条件、B1, ..., Bmは書き換え後のプロセスを表す。生成されたプロセスはすべて並行に実行される。また、各プロセスごとの書き換え条件のチェックも複数の節で並行に実行してよく、コミット時にただ1つの節が選択される(コミッティッド・チョイス)。prologと異なりバックトラックの機能はない。ガード付きホーン節とプロセス動作の指示との関係は以下のようになる。 *停止 A :- Guard | True. *プロセス状態の変更 A :- Guard | B. *並行したmプロセスの生成 A :- Guard | B1, ..., Bm.プロセス間の通信にはプロセス間で共有する論理変数を使用する。書き換え規則の適用に十分な情報がなければ書き換えを中断し、判断に必要な情報が得られるまで待つことで、プロセス間の同期が行われる。多くの場合、プロセス間の通信には論理変数を含んだリストで表現されたストリームを用いる。ストリームは |" TITLE=""> のようなリストで実現する。論理変数を共有するプロセスの数に制限はないため、ストリーム通信は1対1だけではなく1対Nのブロードキャストなど、様々な形態が可能である。GHCでは、プロセス間の同期のための中断のメカニズムとして''入力ガード (Input Guard)''を用いる。ヘッドおよびガード部でのユニフィケーションの際、呼び出し側の変数は入力モードでしかアクセスできず、呼び出し側の変数を具体化(Instantiation)するような試みは中断させられる。出力となる変数の具体化はボディ部のユニフィケーションで行う。」の詳細全文を読む スポンサード リンク
|